package entity

import (
	dom "a-common/domain"
	"time"
	// "github.com/vmihailenco/msgpack"
)

const (
	SEX_MAN    = "0" // 男
	SEX_WOMAN  = "1" // 女
	SEX_UNKNOW = "2" // 未知
)

// SysUser 系统用户表
type SysUser struct {
	UserId         int64     `xorm:"pk autoincr notnull"` // 用户ID
	DeptId         int64     // 部门ID
	UserName       string    `xorm:"varchar(30) notnull unique"` // 用户账号
	NickName       string    `xorm:"varchar(30) notnull unique"` // 用户昵称
	UserType       string    `xorm:"varchar(2) default('00')"`   // 用户类型（00系统用户）
	Email          string    `xorm:"varchar(50)"`                // 用户邮箱
	Phonenumber    string    `xorm:"varchar(20)"`                // 电话号码
	Sex            string    `xorm:"varchar(1) default(2)"`      // 用户性别（0男 1女 2未知）
	Avatar         string    `xorm:"varchar(100)"`               // 头像地址
	Password       string    `xorm:"varchar(100)"`               // 密码
	Status         string    `xorm:"varchar(1) default('1')"`    // 帐号状态（1正常 0停用）
	LoginIp        string    `xorm:"varchar(128)"`               // 最后登录IP
	LoginDate      time.Time // 最后登录时间
	Alone          string    `xorm:"varchar(1) default('1')"` // 单独登陆（1是 0否）
	LoginToken     string    `xorm:"varchar(255)"`            // 登陆Token
	Address        string    `xorm:"varchar(255)"`            // 联系地址
	dom.BaseStruct `xorm:"extends"`
}

// SysUserVo 映射
type SysUserVo struct {
	UserId      int64    `json:"userId,omitempty" xorm:"pk"`
	DeptId      int64    `json:"deptId,omitempty"`
	UserName    string   `json:"userName,omitempty"`
	UserType    string   `json:"userType,omitempty"`
	Password    string   `json:"-"`
	NickName    string   `json:"nickName,omitempty"`
	Avatar      string   `json:"avatar,omitempty"`
	Phonenumber string   `json:"phonenumber,omitempty"`
	Status      string   `json:"status,omitempty"`
	Email       string   `json:"email,omitempty"`
	Sex         string   `json:"sex,omitempty"`
	LoginIp     string   `json:"loginIp,omitempty"`
	LoginDate   dom.Time `json:"loginDate,omitempty"`
	Alone       string   `json:"alone,omitempty"`
	LoginToken  string   `json:"loginToken,omitempty"`
	Address     string   `json:"address,omitempty"`
}

// SysUserPageVo 页面
type SysUserPageVo struct {
	// 踩坑，若存在相同字段如 status, 则需要将要显示的排在前面，如下就是显示SysUserVo的status
	SysUserVo    `xorm:"extends"`
	Dept         dept `json:"dept,omitempty" xorm:"extends"`
	dom.BaseJson `xorm:"extends"`
}

// UserDto 传输
type UserDto struct {
	SysUserPageVo
	Params dom.ParamTime `json:"params"`
	dom.PageDto

	RoleId  int64   `json:"roleId" xorm:"-"`
	UserIds []int64 `json:"userIds" xorm:"-"`
	RoleIds []int64 `json:"roleIds" xorm:"-"`
	PostIds []int64 `json:"postIds" xorm:"-"`

	OldPassword string `json:"oldPassword" xorm:"-"`
	NewPassword string `json:"newPassword" xorm:"-"`
}

func (m *UserDto) Validator() error {
	if m.PageNum < 1 {
		m.PageNum = 1
	}
	if m.PageSize < 1 {
		m.PageSize = 10
	}
	return nil
}

type dept struct {
	DeptId    int16  `json:"deptId,omitempty"`
	ParentId  int16  `json:"parentId,omitempty"`
	Ancestors string `json:"ancestors,omitempty"`
	DeptName  string `json:"deptName,omitempty"`
	OrderNum  int    `json:"orderNum,omitempty"`
	Leader    string `json:"leader,omitempty"`
	Phone     string `json:"phone,omitempty"`
	Email     string `json:"email,omitempty"`
	Status    string `json:"status,omitempty"`
	DelFlag   string `json:"delFlag,omitempty"`
}

// SysUserExportVo 导出
type SysUserExportVo struct {
	UserId      int64    `excel:"name:用户ID;" xorm:"pk"`
	UserName    string   `excel:"name:登录名称;"`
	NickName    string   `excel:"name:用户名称;"`
	Email       string   `excel:"name:用户邮箱;"`
	Phonenumber string   `excel:"name:手机号码;"`
	Sex         string   `excel:"name:用户性别;replace:0_男,1_女,2_未知;"`
	Status      string   `excel:"name:帐号状态;replace:0_正常,1_停用;"`
	LoginIp     string   `excel:"name:最后登录IP;"`
	LoginDate   dom.Time `excel:"name:最后登录时间;"`
	DeptName    string   `excel:"name:部门名称;"`
	Leader      string   `excel:"name:部门负责人;"`
}

// SysUserImportVo 导入
type SysUserImportVo struct {
	UserId      int64  `json:"userId,omitempty" excel:"name:用户ID;" xorm:"pk"`
	DeptId      int64  `json:"deptId,omitempty" excel:"name:部门编号;"`
	UserName    string `json:"userName,omitempty" excel:"name:登录名称;"`
	NickName    string `json:"nickName,omitempty" excel:"name:用户名称;"`
	Email       string `json:"email,omitempty" excel:"name:用户邮箱;"`
	Phonenumber string `json:"phonenumber,omitempty" excel:"name:手机号码;"`
	Sex         string `json:"sex" excel:"name:用户性别;replace:0_男,1_女,2_未知;"`
	Status      string `json:"status,omitempty" excel:"name:帐号状态;replace:0_正常,1_停用;"`
}

// SysUserSelectListVo 用户下拉列表
type SysUserSelectListVo struct {
	UserId   int64  `json:"userId,omitempty" xorm:"pk"`
	UserName string `json:"userName,omitempty"`
}
